#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 105;
int arr[maxn][maxn];
int dp[maxn][maxn][maxn]; // 表示从 (i,j) 往下, 往右 k 步时 最大路径和
int n;

void solve(){
	cin >> n;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=i;j++) {
			cin >> arr[i][j];
		}
	}
	
	for (int i=n;i>=1;i--) {
		for (int j=1;j<=i;j++) {
			for (int k=0;k<=n-i;k++) { // 第 i 层, 最多往下 n-i 步
				if (k > 0) { // 可以从右边走来, 也可以从左边
					dp[i][j][k] = arr[i][j] + max(dp[i+1][j][k], dp[i+1][j+1][k-1]);
				} else {
					// 只能从左边走来
					dp[i][j][k] = arr[i][j] + dp[i+1][j][k];
				}
			}
		}
	}
	if (n&1) { // 偶数步
		cout << dp[1][1][n/2] << '\n';
	} else {
		cout << max(dp[1][1][n/2], dp[1][1][n/2-1]) << '\n';
	}
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
